package com.qf.index;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import cn.hutool.json.JSONUtil;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;

public class ReadCd {

    public static void main(String[] args) throws SQLException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(format.format(new Date()) + " 程序开始了~~~");

        int onePageNum = 1000;
        String limit = "";
//        String limit = " limit 1";

        String newDataName = "scholar_25_01.";
        String summaryTable = newDataName + "pm_ut_aid_info_0120";
        String spiderCnCoreTable = newDataName + "spider_cn_core";
        String spiderCnKiAnalysisTable = newDataName + "spider_cnki_analysis";
        String spiderCqVipAnalysisTable = newDataName + "spider_cqvip_analysis";
        String spiderWanFangAnalysisTable = newDataName + "spider_wanfang_analysis";
        String spiderYiiGleAnalysisTable = newDataName + "spider_yiigle_analysis";
        String pmArticleTable = newDataName + "spider_pubmed_vip_extend";
        String utArticleTable = newDataName + "spider_tb_true_92007022_1125";
        String jourMergeTable = newDataName + "basic_jour_merge";
        String quotaTable = newDataName + "basic_core_paper_quota";
        String basicCoreTable = newDataName + "basic_core_paper";
        String wordAndCodeSetMapTable = newDataName + "word_and_code_set_map";
        String fullAbbrKeyWordTable = newDataName + "full_abbr_key_word_1218";
        String pmOrUtIdTablePm = newDataName + "pm_ut_aid_info_pm";

        // 词（药物，数字代号：1; 基因，数字代号：2; 通路，数字代号：3; 疾病，数字代号：4）和code（1，2，3，4）代码集合。
        Map<String, Set<Integer>> wordAndCodeSetMap = Drug.getWordAndCodeSetMap(wordAndCodeSetMapTable, "id", "word`,`code_set", limit);

        String field = "UT`,`DE`,`TI`,`AB`,`PY`,`Z3`,`SO`,`DI`,`VL`,`IS`,`BP`,`EP`,`DT`,`Z2`,`Z6`,`FU`,`Z5`,`Z1`,`Z4`,`EM`,`LA`,`SC";
        readCd(spiderCnCoreTable, onePageNum, limit, "id", field, true, 10, summaryTable, wordAndCodeSetMap);

        // main
    }


    public static void readCd(String spiderCnCoreTable, int onePageNum, String limit, String autoId, String field, boolean print, int allTotal, String summaryTable, Map<String, Set<Integer>> wordAndCodeSetMap) throws SQLException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Map<Integer, Integer> dataIdAndAidMap = ReadPm.getDataIdAndAidMap(summaryTable, "id", "cscd_id");
        System.out.println("dataIdAndAidMap.size(): " + dataIdAndAidMap.size());
        List<Entity> tableNum = Db.use().query("select count(1) as count from " + spiderCnCoreTable);
        List<String> supportedList = rSet.getSupportedList();
        if (tableNum.get(0).getInt("count") < 1) {
            return;
        }
        int tableMax = Db.use().queryNumber("select max(" + autoId + ") from " + spiderCnCoreTable).intValue();
        Collection<Integer> tableList = new ArrayList<>();
        NumberUtil.appendRange(0, tableMax + onePageNum, onePageNum, tableList);
        AtomicInteger sumNum = new AtomicInteger(0);
        int showNum = Math.max((tableList.size() / allTotal), 1) + (tableList.size() % allTotal);
        AtomicInteger startNum = new AtomicInteger(1);
        tableList.parallelStream().forEach(startId -> {
            try {
                List<Entity> tableData = Db.use().query("select `" + autoId + "`,`" + field + "` from " + spiderCnCoreTable + " where " + autoId + " between " + startId + " and " + (startId + onePageNum - 1) + limit);
                if (print && sumNum.getAndIncrement() % showNum == 0) {
//                    System.out.println("\033[31;1m" + format.format(new Date()) + " 读表现在开始：" + startNum.getAndIncrement() + " 总次数：" + allTotal + " 表名：" + spiderCnCoreTable + Utils.printMemoryStr() + "\033[0m");
                }
                for (Entity entry : tableData) {
                    Integer dataId = entry.getInt(autoId);
                    if (!dataIdAndAidMap.containsKey(dataId)) {
                        continue;
                    }

                    String ut = Utils.getStrField(entry, "UT").toUpperCase().replace(" ", "").replace("CSCD:", "");
                    String keyword = Utils.getStrField(entry, "DE");
                    String title = Utils.getStrField(entry, "TI");
                    String abText = Utils.getStrField(entry, "AB");
                    String py = Utils.getStrField(entry, "PY");
                    int year = NumberUtil.isInteger(py.trim()) ? Integer.parseInt(py.trim()) : 1900;
                    // 获取期刊的名称，优先使用字段："Z3"，如果为空，再取"SO"的值，如果再为空，就不管它了。
                    String z3 = Utils.getStrField(entry, "Z3");
                    String so = z3.isEmpty() ? Utils.getStrField(entry, "SO") : z3;
                    String di = Utils.dellEnd(Utils.getStrField(entry, "DI"));
                    String v = Utils.getStrField(entry, "VL");
                    String i = Utils.getStrField(entry, "IS");
                    String b = Utils.getStrField(entry, "BP");
                    String e = Utils.getStrField(entry, "EP");

                    // Mol Neurobiol. 2016;53(3):1648-1653. doi: 10.1007/s12035-015-9121-6.
                    String info = (so.endsWith(".") ? so.substring(0, so.length() - 1) : so) + ". " + ((py.endsWith("-") ? py.substring(0, py.length() - "-".length()) : py) + ";") + (v + ":") + ("(" + i + "): ")
                            + (b) + (e.isEmpty() ? ". " : "-" + e + ". ") + (di.length() > 6 ? ("doi: " + di + ". ") : "");
                    Set<String> ptSet = new HashSet<>(); // 出版类型
                    String dt = entry.getStr("DT");
                    if (null != dt && !dt.isEmpty()) {
                        // 与PubMed的出版类型相对应。
                        dt = "Article".equals(dt) ? "Journal Article" : dt;
                        ptSet.add(dt);
                    }

                    List<String> authList = new ArrayList<>();
                    String z2 = entry.getStr("Z2");
                    if (null != z2 && z2.length() > 1) {
                        String[] split = z2.replace(";-;;-;", "; ").replace(";-;", "; ").replace(";; ", "; ").split("; ");
                        for (String auth : split) {
                            if (auth.trim().length() > 1) {
                                authList.add(auth.trim());
                            }
                        }
                    }

                    // 耿力, 华中科技大学同济医学院附属协和医院护理部, 武汉, 湖北 430022, 中国，从这里面拆解出来作者和单位，因为"华中科技大学同济医学院附属协和医院"，可以拆解为"[华中科技大学同济医学院附属协和医院, 华中科技大学]"，所以其结构为：List<List<String>> unitList = new ArrayList<>();
                    List<En.C1Auth> c1List = Utils.getCsC1List(Utils.getStrField(entry, "Z6"));
                    List<String> fundList = getCsCdFundList(Utils.getStrField(entry, "FU"), supportedList);
                    String cnTi = Utils.getStrField(entry, "Z1").replaceAll("<[a-z]+ [^>]*>", " ").replaceAll("</[a-z]+>", " ").replaceAll(" +", " ").trim();
                    String cnAb = Utils.getStrField(entry, "Z4").replaceAll("<[a-z]+ [^>]*>", " ").replaceAll("</[a-z]+>", " ").replaceAll(" +", " ").trim();
                    List<En.CategoryAndInfo> categoryAndInfoList = Drug.getDrug(title, keyword, abText, wordAndCodeSetMap);
                    try {
                        Db.use().update(
                                Entity.create().set("ut", ut).set("doi", di).set("ab", abText).set("keyword", ReadUt.strToJson(keyword)).set("title", title).set("journal", so).set("year", year).set("pt", JSONUtil.toJsonStr(ptSet)).set("auth", JSONUtil.toJsonStr(authList))
                                        .set("c1_au", JSONUtil.toJsonStr(c1List)).set("drug_gene_pathway_disease", JSONUtil.toJsonStr(categoryAndInfoList)).set("mail_list", JSONUtil.toJsonStr(ReadUt.getMail(entry.getStr("EM"))))
                                        .set("fund_list", JSONUtil.toJsonStr(fundList)).set("language", Utils.getStrField(entry, "LA")).set("subject", ReadUt.strToJson(entry.getStr("SC")))
                                        .set("info", Fusion.reInfo(info)).set("cn_ti", cnTi).set("cn_ab", cnAb).set("cn_kw", ReadUt.strToJson(entry.getStr("Z5"))),
                                Entity.create(summaryTable).set("id", dataIdAndAidMap.get(dataId)));
                    } catch (SQLException ee) {
                        ee.printStackTrace();
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        });
        dataIdAndAidMap.clear();
    }

    public static List<String> getCsCdFundList(String fus, List<String> supportedList) {
        // 提取CSCD中的基金项目，如果该基金项目含有编号，则把编号给予去除，只包含基金项目的主体名称。
        fus = null == fus ? "" : fus;
        fus = fus.replace(";;-;", "; ");
        String[] fuSplit = fus.split("; ");
        List<String> fundList = new ArrayList<>();
        for (String original : fuSplit) {
            String fu = original.replace("－", "-").replace(";-;", " ").replace("“", "\"").replace("”", "\"").replaceAll(" +", " ").replace("（", "(").replace("）", ")").replace("( ", "(")
                    .replace(" )", ")").replace(" (", "(").replace(") ", ")").replace("，", ",").replace("：", ":").replace(": ", ":").replace(" :", ":")
                    .replace("- ", "-").replace(" -", "-").replace("；", ";").replace("; ", ";").replace(" ;", ";").replace("＆", "&").replace(", ", "Łł").trim();
            for (String supported : supportedList) {
                fu = fu.toLowerCase().startsWith(supported + " by ") ? fu.substring((supported + " by ").length()).trim() : fu;
            }
            fu = fu.toLowerCase().startsWith("the ") ? fu.substring("the ".length()) : fu;
            fu = fu.endsWith("。") ? fu.substring(0, fu.length() - "。".length()) : fu;
            fu = fu.endsWith(".") ? fu.substring(0, fu.length() - ".".length()) : fu;
            fu = fu.replaceAll("(\\([0-9A-Za-z-:,. 、;＋/&Łł计划编准号合项批为和同目\\[\\]]{5,36}\\))", "ĺļ$1");
            fu = fu.replace("Łł", ", ");
            String result = original;
            if (fu.contains("ĺļ")) {
                String fund = fu.substring(0, fu.indexOf("ĺļ"));
                String number = fu.substring(fu.indexOf("ĺļ") + "ĺļ".length());
                number = (number.contains(")")) ? number.substring(0, number.indexOf(")") + ")".length()) : number;
                if (number.toLowerCase().contains("973 program") || number.toLowerCase().contains("863 program")) {
                    result = fund + number;
                } else {
                    result = fund;
                }
            }
            fundList.add(result);
        }
        return fundList;
    }

    // lijinlan@tongji.edu.cn; tianjun@tongji.edu.cn
//    public static Set<String> getMail(String mails) {
//        Set<String> mailSet = new HashSet<>();
//        if (null != mails && mails.contains("@")) {
//            String[] split = mails.split(";");
//            for (String mail : split) {
//                mail = mail.trim();
//                if (Utils.fuHeiMail(mail)) {
//                    mailSet.add(mail);
//                }
//            }
//        }
//        return mailSet;
//    }


//    public static List<En.FundInfo> getCsCdFundList(String fus, List<String> supportedList) {
//        // 实体类FundInfo包含三个属性，如果基金项目不含编号（number），则只有原始信息（info），此时可以把原始信息当作基金信息，这样可以节约占用空间。
//        List<En.FundInfo> fundInfoList = new ArrayList<>();
//        fus = null == fus ? "" : fus;
//        fus = fus.replace(";;-;", "; ");
//        String[] fuSplit = fus.split("; ");
//        for (String original : fuSplit) {
//            String fu = original.replace("－", "-").replace(";-;", " ").replace("“", "\"").replace("”", "\"").replaceAll(" +", " ").replace("（", "(").replace("）", ")").replace("( ", "(")
//                    .replace(" )", ")").replace(" (", "(").replace(") ", ")").replace("，", ",").replace("：", ":").replace(": ", ":").replace(" :", ":")
//                    .replace("- ", "-").replace(" -", "-").replace("；", ";").replace("; ", ";").replace(" ;", ";").replace("＆", "&").replace(", ", "Łł").trim();
//            for (String supported : supportedList) {
//                fu = fu.toLowerCase().startsWith(supported + " by ") ? fu.substring((supported + " by ").length()).trim() : fu;
//            }
//            fu = fu.toLowerCase().startsWith("the ") ? fu.substring("the ".length()) : fu;
//            fu = fu.endsWith("。") ? fu.substring(0, fu.length() - "。".length()) : fu;
//            fu = fu.endsWith(".") ? fu.substring(0, fu.length() - ".".length()) : fu;
//            fu = fu.replaceAll("(\\([0-9A-Za-z-:,. 、;＋/&Łł计划编准号合项批为和同目\\[\\]]{6,36}\\))", "ĺļ$1");
//            fu = fu.replace("Łł", ", ");
//            En.FundInfo fundInfo = new En.FundInfo();
//            fundInfo.setInfo(original);
//            if (fu.contains("ĺļ")) {
//                String fund = fu.substring(0, fu.indexOf("ĺļ"));
//                String number = fu.substring(fu.indexOf("ĺļ") + "ĺļ".length());
//                number = (number.contains(")")) ? number.substring(0, number.indexOf(")") + ")".length()) : number;
//                if (number.toLowerCase().contains("973 program") || number.toLowerCase().contains("863 program")) {
//                    fundInfo.setFund(fund + number);
////                    wosFundAndSumMap.compute(fund + number, (key, value) -> value != null ? (value + 1) : 1);
//                } else {
//                    fundInfo.setNumber(number);
//                    fundInfo.setFund(fund);

    /// /                    wosFundAndSumMap.compute(fund, (key, value) -> value != null ? (value + 1) : 1);
//                }
//            }
//            fundInfoList.add(fundInfo);
//        }
//        return fundInfoList;
//    }

//    public static List<String> getCsCdUnitListDept(String info, List<String> univList, List<String> hospList, Set<String> errUnitSet, Map<Set<String>, Integer> ordinaryAndSumMap, Map<String, String> wordAndStandardMap, Set<String> cnDeptSet, Set<String> enDeptSet, Map<String, Integer> deptAndSumMap) {
//        if (!Utils.isContainChinese(info)) {
//            Set<String> oneC1 = ReadUnit.getOneC1Dept(info, "cn", wordAndStandardMap, enDeptSet, deptAndSumMap);
//            return new ArrayList<>(oneC1);
//        }
//        Set<String> ordinarySet = new HashSet<>();
//        // .replaceAll("\\s+(\\d+)", "$1") ->数字前面如果有空格则给予删除  四川大学华西第二医院/华西妇产儿童医院(.replace("/", "|")去掉的原因)
//        String[] split = info.replace("|", " ").replace("　", " ").replace("（", "(").replace("）", ")").replaceAll(" +", " ").replace(" (", "(").replace(" )", ")")
//                .replace("、", "|").replace("—", "|").replace("!", "|").replace("！", "|").replace("暨", "|")
//                .replace("癌症中心·", "癌症中心|").replace("办公室-", "办公室|").replace("保健院·", "保健院|").replace("单位-", "单位|").replace("防治中心·", "防治中心|").replace("港航-", "港航|")
//                .replace("规划署-", "规划署|").replace("科学院·", "科学院|").replace("气象局-", "气象局|").replace("实验室-", "实验室|").replace("实验室·", "实验室|").replace("系统所-", "系统所|")
//                .replace("学部-", "学部|").replace("学系-", "学系|").replace("学院-", "学院|").replace("研究基地-", "研究基地|").replace("研究所-", "研究所|").replace("研究所·", "研究所|")
//                .replace("研究中心·", "研究中心|").replace("医学中心·", "医学中心|").replace("医院-", "医院|").replace("医院·", "医院|").replace("政府-", "政府|").replace("中国·", "中国|")
//                .replace(",", "|").replace(".", "|").replace(";", "|").replace(":", "|").replaceAll("\\s+(\\d+)", "$1").replaceAll("\\d{6}", "|").replaceAll("\\d{5}", "|")
//                .replace("，", "|").replace("。", "|").replace("；", "|").replace("：", "|").split("\\|");
//        for (String string : split) {
//            String s = string.trim();
//            if (s.length() > 1) {
//                String univ = ReadUnit.findUnit(univList, s, errUnitSet);
//                String hosp = ReadUnit.findUnit(hospList, s, errUnitSet);
//                if (!univ.isEmpty() && !hosp.isEmpty()) {
//                    ordinarySet.add(univ);
//                    ordinarySet.add(hosp);
//                    // 此类为大学加医院的组合体，分别加入大学和医院两部分
//                    putDeptAndSumMap(hosp, s, deptAndSumMap);
//                } else if (!univ.isEmpty()) {
//                    ordinarySet.add(univ);
//                    putDeptAndSumMap(univ, s, deptAndSumMap);
//                } else if (!hosp.isEmpty()) {
//                    ordinarySet.add(hosp);
//                    putDeptAndSumMap(hosp, s, deptAndSumMap);
//                } else {
//                    deptAndSumMap.compute(s, (key, value) -> value != null ? (value + 1) : 1);
//                }
//            }
//        }
//        List<String> ordinaryList = new ArrayList<>(ordinarySet);
//        if (!ordinarySet.isEmpty()) {
//            ordinaryAndSumMap.compute(ordinarySet, (key, value) -> value != null ? (value + 1) : 1);
//        }
//        return ordinaryList;
//    }
    public static void putDeptAndSumMap(String hosp, String s, Map<String, Integer> deptAndSumMap) {
        if (s.contains(hosp) && s.length() > hosp.length()) {
            String dept = s.substring(s.indexOf(hosp) + hosp.length());
            if (dept.length() > 1) {
                deptAndSumMap.compute(dept, (key, value) -> value != null ? (value + 1) : 1);
            }
        }
    }

//    public static List<String> getCsCdUnitList(String info, List<String> univList, List<String> hospList, Set<String> errUnitSet, Map<Set<String>, Integer> ordinaryAndSumMap, Map<String, String> wordAndStandardMap) {
//        if (!Utils.isContainChinese(info)) {
//            Set<String> oneC1 = ReadUnit.getOneC1(info, "cn", wordAndStandardMap);
//            return new ArrayList<>(oneC1);
//        }
//        Set<String> ordinarySet = new HashSet<>();
//        // .replaceAll("\\s+(\\d+)", "$1") ->数字前面如果有空格则给予删除  四川大学华西第二医院/华西妇产儿童医院(.replace("/", "|")去掉的原因)
//        String[] split = info.replace("|", " ").replace("　", " ").replace("（", "(").replace("）", ")").replaceAll(" +", " ").replace(" (", "(").replace(" )", ")")
//                .replace("、", "|").replace("—", "|").replace("!", "|").replace("！", "|").replace("暨", "|")
//                .replace("癌症中心·", "癌症中心|").replace("办公室-", "办公室|").replace("保健院·", "保健院|").replace("单位-", "单位|").replace("防治中心·", "防治中心|").replace("港航-", "港航|")
//                .replace("规划署-", "规划署|").replace("科学院·", "科学院|").replace("气象局-", "气象局|").replace("实验室-", "实验室|").replace("实验室·", "实验室|").replace("系统所-", "系统所|")
//                .replace("学部-", "学部|").replace("学系-", "学系|").replace("学院-", "学院|").replace("研究基地-", "研究基地|").replace("研究所-", "研究所|").replace("研究所·", "研究所|")
//                .replace("研究中心·", "研究中心|").replace("医学中心·", "医学中心|").replace("医院-", "医院|").replace("医院·", "医院|").replace("政府-", "政府|").replace("中国·", "中国|")
//                .replace(",", "|").replace(".", "|").replace(";", "|").replace(":", "|").replaceAll("\\s+(\\d+)", "$1").replaceAll("\\d{6}", "|").replaceAll("\\d{5}", "|")
//                .replace("，", "|").replace("。", "|").replace("；", "|").replace("：", "|").split("\\|");
//        for (String s : split) {
//            s = s.trim();
//            if (s.length() > 3) {
//                String univ = ReadUnit.findUnit(univList, s, errUnitSet);
//                String hosp = ReadUnit.findUnit(hospList, s, errUnitSet);
//                if (!univ.isEmpty() && !hosp.isEmpty()) {
//                    ordinarySet.add(univ);
//                    ordinarySet.add(hosp);
//                    // 此类为大学加医院的组合体，分别加入大学和医院两部分
//                } else if (!univ.isEmpty()) {
//                    ordinarySet.add(univ);
//                } else if (!hosp.isEmpty()) {
//                    ordinarySet.add(hosp);
//                }
//            }
//        }
//        List<String> ordinaryList = new ArrayList<>(ordinarySet);
//        if (!ordinarySet.isEmpty()) {
//            ordinaryAndSumMap.compute(ordinarySet, (key, value) -> value != null ? (value + 1) : 1);
//        }
//        return ordinaryList;
//    }

    /*
      CREATE TABLE `pm_ut_aid_info_cd` (
        `id` int(10) NOT NULL AUTO_INCREMENT,
        `key_word_list` longtext COMMENT '关键词集合，此是基于标题、摘要、关键词三处的整合',
        `pm_ut_doi_list` text COMMENT 'pm、doi、ut三者的集合，用于童工的ES检索',
        `journal` text COMMENT '期刊的名称',
        `aid` int(9) DEFAULT NULL COMMENT '因与原表字段重名，pid改为aid，论文的唯一主键，使用老鲍的论文基础表中的自增主键',
        `citation_quota` double DEFAULT NULL COMMENT '引文的质量（按中科院分区表）',
        `reference_quota` double DEFAULT NULL COMMENT '参文的质量',
        `ti_key` text COMMENT '从标题中提取的关键词',
        `ab_key` longtext COMMENT '从摘要中提取的关键词',
        `kw_key` longtext COMMENT '从关键词中提取的关键词(若是主题词给予转换)',
        `abb_word` longtext COMMENT '从简写中提取出来的关键词（是一对）',
        `zky_dalei` int(1) DEFAULT NULL COMMENT '中科院的期刊分区表最佳的大类',
        `jcr_if` double DEFAULT NULL COMMENT 'jcr(scie)期刊影响因子',
        `year` int(4) DEFAULT NULL COMMENT '论文的出版年',
        `title` text COMMENT '论文的原始标题',
        `keyword` longtext COMMENT '论文的原始关键词',
        `ab` longtext COMMENT '论文的原始摘要',
        `mesh` text COMMENT 'PubMed的主题词表，含主题词和副主题词',
        `jid` int(9) DEFAULT NULL COMMENT '期刊的唯一id号，此为期刊关联表的自增主键',
        `discussion` longtext COMMENT '摘要提取出来的特定字段',
        `results` longtext COMMENT '摘要提取出来的特定字段',
        `methods` longtext COMMENT '摘要提取出来的特定字段',
        `background` longtext COMMENT '摘要提取出来的特定字段',
        `c1_list` longtext COMMENT 'wos表中的c1或PubMed表中的作者单位信息字段，只保留单位信息',
        `c1_unit_list` longtext COMMENT '从c1中提取出来的单位信息',
        `rp_list` longtext COMMENT 'wos表中的rp字段，只保留单位信息',
        `rp_unit_list` longtext COMMENT '从rp中提取出来的单位信息',
        `cite` longtext COMMENT '参文格式（NLM、APA、MLA、AMA四种）',
        `cn_ti` text COMMENT '中文的文献标题',
        `cn_ab` longtext COMMENT '中文的文献摘要',
        `cn_kw` longtext COMMENT '中文的文献关键词',
        `cn_type` text COMMENT '中文的文献的类型，综述等',
        `pt` text COMMENT '英文的文献的类型，综述等，是一个集合',
        `cn_country` text COMMENT '中文的发文的国家，区分第一或通讯以及其它的，此为非第一或通讯',
        `cn_unit` longtext COMMENT '中文的发文的机构，区分第一或通讯以及其它的，此为非第一或通讯',
        `is_cns` int(1) DEFAULT NULL COMMENT '六大顶级刊，是为1，否为0',
        `cn_fund` longtext COMMENT '中文的基金的名称',
        `cn_country_1` text COMMENT '中文的发文的国家，区分第一或通讯以及其它的，此为第一或通讯',
        `cn_unit_1` text COMMENT '中文的发文的机构，区分第一或通讯以及其它的，此为第一或通讯',
        `pmId` int(8) DEFAULT NULL COMMENT '最大8位的pmId号',
        `ut` varchar(15) DEFAULT NULL COMMENT '此为15位的UT号',
        `doi` text COMMENT 'doi号集合',
        `nlmId` varchar(25) DEFAULT NULL COMMENT 'nlmId号，无其它字符',
        `cite_score` double DEFAULT NULL COMMENT '期刊citeScore影响因子值',
        `jcr_quartile` int(1) DEFAULT NULL COMMENT 'jcr(scie)期刊分区',
        `fund` longtext COMMENT '来自wos的基金名称(FU字段)',
        `fund_list` longtext COMMENT '从原始基金信息中提供出来的基金名称，待规范。',
        `method_info` longtext COMMENT '摘要提取出来的特定字段集合',
        `trans_ok` int(1) DEFAULT NULL COMMENT '翻译完成为1，没有完成为0',
        `drug_gene_pathway_disease` longtext COMMENT '药物、基因、通路、疾病',
        `auth` longtext COMMENT '原始的作者信息，全写',
        `sort_auth` longtext COMMENT 'Chang-Ming Huang  英文名字中，新志贾这类属于正序，反之贾新志这类属于反序，程序默认为正序转反序，如果是反序则不用再转换了。',
        `info` longtext COMMENT '备用字段',
        `is_retraction` int(1) DEFAULT NULL COMMENT '是否是撤稿，是为1，否为0；',
        `is_china` int(1) DEFAULT NULL COMMENT '是否是中国人发表的，是为1，否为0；',
        `cn_discussion` longtext COMMENT '中文摘要提取出来的特定字段',
        `cn_results` longtext COMMENT '中文摘要提取出来的特定字段',
        `cn_methods` longtext COMMENT '中文摘要提取出来的特定字段',
        `cn_background` longtext COMMENT '中文摘要提取出来的特定字段',
        PRIMARY KEY (`id`),
        KEY `aid` (`aid`),
        KEY `pmId` (`pmId`),
        KEY `ut` (`ut`),
        KEY `jid` (`jid`),
        KEY `trans_ok` (`trans_ok`)
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
     */


}
